package main

import (
	"flag"
	"fmt"
	"os"
)

/**
*  User: zhanbei
*  Date: 2025/10/27
*  Description: 一个在Linux终端展示有趣ASCII动画的程序
 */

const (
	version = "1.0.0"
)

// 显示使用帮助
func showHelp() {
	fmt.Println("╔══════════════════════════════════════════════════════════════╗")
	fmt.Println("║                    Funny - 终端动画工具                        ║")
	fmt.Println("║                     Version: " + version + "                          ║")
	fmt.Println("╚══════════════════════════════════════════════════════════════╝")
	fmt.Println()
	fmt.Println("使用方法:")
	fmt.Println("  funny [选项]")
	fmt.Println()
	fmt.Println("可用的动画选项:")
	fmt.Println("  -travel    星际穿越场景 - 展示穿越星空的动画效果")
	fmt.Println("  -train     小火车 - 经典的火车呼啸而过动画")
	fmt.Println("  -bang      CS:GO炸弹 - C4炸弹安装与爆炸效果")
	fmt.Println("  -time      翻牌时钟 - 桌面翻牌卡方式显示当前时间")
	fmt.Println("  -love      爱心雨 - 从天而降的爱心动画")
	fmt.Println("  -hack      黑客帝国 - Matrix数字雨特效")
	fmt.Println("  -csgo      CS:GO对峙 - CT与T对峙场景")
	fmt.Println("  -crash     服务器崩溃 - 系统崩溃与关机动画")
	fmt.Println()
	fmt.Println("其他选项:")
	fmt.Println("  -help      显示此帮助信息")
	fmt.Println("  -h         显示此帮助信息")
	fmt.Println()
	fmt.Println("示例:")
	fmt.Println("  funny -train     # 运行小火车动画")
	fmt.Println("  funny -love      # 运行爱心雨动画")
	fmt.Println("  funny -help      # 显示帮助信息")
	fmt.Println()
	fmt.Println("注意: 请在支持ANSI转义序列的终端中运行以获得最佳效果")
	fmt.Println()
}

func main() {
	// 定义命令行参数
	travel := flag.Bool("travel", false, "星际穿越场景")
	train := flag.Bool("train", false, "小火车动画")
	bang := flag.Bool("bang", false, "页面爆炸效果")
	time := flag.Bool("time", false, "翻牌时钟")
	love := flag.Bool("love", false, "爱心雨")
	hack := flag.Bool("hack", false, "黑客帝国")
	csgo := flag.Bool("csgo", false, "CS:GO对峙")
	crash := flag.Bool("crash", false, "服务器崩溃")
	help := flag.Bool("help", false, "显示帮助信息")
	h := flag.Bool("h", false, "显示帮助信息")

	// 自定义Usage函数
	flag.Usage = showHelp

	// 解析命令行参数
	flag.Parse()

	// 显示帮助信息
	if *help || *h {
		showHelp()
		return
	}

	// 如果没有提供任何参数，显示帮助
	if !*travel && !*train && !*bang && !*time && !*love && !*hack && !*csgo && !*crash {
		showHelp()
		return
	}

	// 执行对应的动画
	executed := false
	if *travel {
		RunTravel()
		executed = true
	}
	if *train {
		RunTrain()
		executed = true
	}
	if *bang {
		RunBang()
		executed = true
	}
	if *time {
		RunTime()
		executed = true
	}
	if *love {
		RunLove()
		executed = true
	}
	if *hack {
		RunHack()
		executed = true
	}
	if *csgo {
		RunCSGO()
		executed = true
	}
	if *crash {
		RunCrash()
		executed = true
	}

	// 如果没有执行任何动画
	if !executed {
		fmt.Fprintln(os.Stderr, "错误: 未指定有效的动画选项")
		fmt.Fprintln(os.Stderr, "使用 -help 查看可用选项")
		os.Exit(1)
	}
}
